#!/bin/bash

# java env java 环境变量
export JAVA_HOME=/opt/dragonwell-11.0.14.10+0-GA
export PATH=$JAVA_HOME/bin:$PATH

# JVM 参数
# -client，-server
# 这两个参数用于设置虚拟机使用何种运行模式，client模式启动比较快，
# 但运行时性能和内存管理效率不如server模式，通常用于客户端应用程序。
# 相反，server模式启动比client慢，但可获得更高的运行性能。
# -Xms128m 设置的是JVM堆最小内存为128m
# -Xmx256m 设置的是JVM堆最大内存为256m
JVM="-server -Xms128m -Xmx128m" 


# 固定变量
# 定义颜色变量、\033、\e、\E是等价的，都是转义起始符
RED='\e[1;31m'     #高亮，字体红
GREEN='\e[1;32m'   #高亮，字体绿
YELLOW='\e[1;33m'  #高亮，字体黄
RES='\033[0m'      #颜色定义完成
PID=                 #进程pid
NAME=${2} # 模块名
PROJECT=${NAME}.jar #完整工程名
LOG=${3}.log         #日志文件 



# 检测PID
function getPid(){
  echo -e "${GREEN}=======================检测状态=======================${RES}"
  PID=$(pgrep -f ${PROJECT})
  if [ ${PID} ] 
  then
      echo -e "This application：【${PROJECT}】 is \033[42;37m running \033[0m \n"
      echo -e "This PID is \033[42;37m ${PID} \033[0m \n"
  else
      echo -e "This application：【${PROJECT}】 is \033[41m not running \e[0m \n"   
  fi 
}


# 启动程序
function start(){
  #启动前，先停止之前的程序
  stop
  if [ ${PID} ]
  then
      echo -e "This application stop failure，unable to start"
      echo -e "This application is running"
  else
      echo -e "This application will be launched ===================>\n"
      nohup java ${JVM} -jar ${PROJECT} --spring.profiles.active=pro >${LOG} 2>&1 &     
      echo -e "${YELLOW}========================启动中========================${RES}"
      sleep 5
      getPid
      if [ ${PID} ]
      then
          echo -e "This application start success \n"
          echo -e ""
          set -m 启用监视模式 防止ctrl+z 时终止脚本进程
          #tail -f ${LOG}
          tail -n 200 ${LOG}
      else
          echo -e "This application start failure"
      fi
  fi
}


# 停止程序
function stop(){
  getPid
  if [ ${PID} ]
  then
      echo -e " \033[41;37m This application will be killed \033[0m ==================> \n"
      kill -9 ${PID}

      getPid
      if [ ${PID} ]
      then
          echo -e "This application stop failure"
      else
          echo -e "This application stop success"
      fi
  fi
}



#启动时带参数，根据参数执行
if [ ${#} -ge 1 ]
then
    case ${1} in
        "start")
            start
        ;;
        "restart")
            start
        ;;
        "stop")
            stop
        ;;
        *)
            echo "${1}无任何操作"
        ;;
    esac
else
    echo "
    command如下命令：
    start：启动
    stop：停止进程
    restart：重启

    示例命令如：./sys.sh start stater log
    "
fi
